home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-01-20 | 54.2 KB | 1,348 lines |
-
-
-
-
-
-
- Network Working Group SNMPv2 Working Group
- Request for Comments: 1905 J. Case
- Obsoletes: 1448 SNMP Research, Inc.
- Category: Standards Track K. McCloghrie
- Cisco Systems, Inc.
- M. Rose
- Dover Beach Consulting, Inc.
- S. Waldbusser
- International Network Services
- January 1996
-
-
- Protocol Operations
- for Version 2 of the
- Simple Network Management Protocol (SNMPv2)
-
- Status of this Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
- 1. Introduction
-
- A management system contains: several (potentially many) nodes, each
- with a processing entity, termed an agent, which has access to
- management instrumentation; at least one management station; and, a
- management protocol, used to convey management information between
- the agents and management stations. Operations of the protocol are
- carried out under an administrative framework which defines
- authentication, authorization, access control, and privacy policies.
-
- Management stations execute management applications which monitor and
- control managed elements. Managed elements are devices such as
- hosts, routers, terminal servers, etc., which are monitored and
- controlled via access to their management information.
-
- Management information is viewed as a collection of managed objects,
- residing in a virtual information store, termed the Management
- Information Base (MIB). Collections of related objects are defined
- in MIB modules. These modules are written using a subset of OSI's
- Abstract Syntax Notation One (ASN.1) [1], termed the Structure of
- Management Information (SMI) [2].
-
-
-
-
-
-
- SNMPv2 Working Group Standards Track [Page 1]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- The management protocol, version 2 of the Simple Network Management
- Protocol, provides for the exchange of messages which convey
- management information between the agents and the management
- stations. The form of these messages is a message "wrapper" which
- encapsulates a Protocol Data Unit (PDU). The form and meaning of the
- "wrapper" is determined by an administrative framework which defines
- both authentication and authorization policies.
-
- It is the purpose of this document, Protocol Operations for SNMPv2,
- to define the operations of the protocol with respect to the sending
- and receiving of the PDUs.
-
- 1.1. A Note on Terminology
-
- For the purpose of exposition, the original Internet-standard Network
- Management Framework, as described in RFCs 1155 (STD 16), 1157 (STD
- 15), and 1212 (STD 16), is termed the SNMP version 1 framework
- (SNMPv1). The current framework is termed the SNMP version 2
- framework (SNMPv2).
-
- 2. Overview
-
- 2.1. Roles of Protocol Entities
-
- A SNMPv2 entity may operate in a manager role or an agent role.
-
- A SNMPv2 entity acts in an agent role when it performs SNMPv2
- management operations in response to received SNMPv2 protocol
- messages (other than an inform notification) or when it sends trap
- notifications.
-
- A SNMPv2 entity acts in a manager role when it initiates SNMPv2
- management operations by the generation of SNMPv2 protocol messages
- or when it performs SNMPv2 management operations in response to
- received trap or inform notifications.
-
- A SNMPv2 entity may support either or both roles, as dictated by its
- implementation and configuration. Further, a SNMPv2 entity can also
- act in the role of a proxy agent, in which it appears to be acting in
- an agent role, but satisfies management requests by acting in a
- manager role with a remote entity.
-
- 2.2. Management Information
-
- The term, variable, refers to an instance of a non-aggregate object
- type defined according to the conventions set forth in the SMI [2] or
- the textual conventions based on the SMI [3]. The term, variable
- binding, normally refers to the pairing of the name of a variable and
-
-
-
- SNMPv2 Working Group Standards Track [Page 2]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- its associated value. However, if certain kinds of exceptional
- conditions occur during processing of a retrieval request, a variable
- binding will pair a name and an indication of that exception.
-
- A variable-binding list is a simple list of variable bindings.
-
- The name of a variable is an OBJECT IDENTIFIER which is the
- concatenation of the OBJECT IDENTIFIER of the corresponding object-
- type together with an OBJECT IDENTIFIER fragment identifying the
- instance. The OBJECT IDENTIFIER of the corresponding object-type is
- called the OBJECT IDENTIFIER prefix of the variable.
-
- 2.3. Access to Management Information
-
- Three types of access to management information are provided by the
- protocol. One type is a request-response interaction, in which a
- SNMPv2 entity, acting in a manager role, sends a request to a SNMPv2
- entity, acting in an agent role, and the latter SNMPv2 entity then
- responds to the request. This type is used to retrieve or modify
- management information associated with the managed device.
-
- A second type is also a request-response interaction, in which a
- SNMPv2 entity, acting in a manager role, sends a request to a SNMPv2
- entity, also acting in a manager role, and the latter SNMPv2 entity
- then responds to the request. This type is used to notify a SNMPv2
- entity, acting in a manager role, of management information
- associated with another SNMPv2 entity, also acting in a manager role.
-
- The third type of access is an unconfirmed interaction, in which a
- SNMPv2 entity, acting in an agent role, sends a unsolicited message,
- termed a trap, to a SNMPv2 entity, acting in a manager role, and no
- response is returned. This type is used to notify a SNMPv2 entity,
- acting in a manager role, of an exceptional situation, which has
- resulted in changes to management information associated with the
- managed device.
-
- 2.4. Retransmission of Requests
-
- For all types of request in this protocol, the receiver is required
- under normal circumstances, to generate and transmit a response to
- the originator of the request. Whether or not a request should be
- retransmitted if no corresponding response is received in an
- appropriate time interval, is at the discretion of the application
- originating the request. This will normally depend on the urgency of
- the request. However, such an application needs to act responsibly
- in respect to the frequency and duration of re-transmissions.
-
-
-
-
-
- SNMPv2 Working Group Standards Track [Page 3]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- 2.5. Message Sizes
-
- The maximum size of a SNMPv2 message is limited to the minimum of:
-
- (1) the maximum message size which the destination SNMPv2 entity can
- accept; and,
-
- (2) the maximum message size which the source SNMPv2 entity can
- generate.
-
- The former may be known on a per-recipient basis; and in the absence
- of such knowledge, is indicated by transport domain used when sending
- the message. The latter is imposed by implementation-specific local
- constraints.
-
- Each transport mapping for the SNMPv2 indicates the minimum message
- size which a SNMPv2 implementation must be able to produce or
- consume. Although implementations are encouraged to support larger
- values whenever possible, a conformant implementation must never
- generate messages larger than allowed by the receiving SNMPv2 entity.
-
- One of the aims of the GetBulkRequest-PDU, specified in this
- protocol, is to minimize the number of protocol exchanges required to
- retrieve a large amount of management information. As such, this PDU
- type allows a SNMPv2 entity acting in a manager role to request that
- the response be as large as possible given the constraints on message
- sizes. These constraints include the limits on the size of messages
- which the SNMPv2 entity acting in an agent role can generate, and the
- SNMPv2 entity acting in a manager role can receive.
-
- However, it is possible that such maximum sized messages may be
- larger than the Path MTU of the path across the network traversed by
- the messages. In this situation, such messages are subject to
- fragmentation. Fragmentation is generally considered to be harmful
- [4], since among other problems, it leads to a decrease in the
- reliability of the transfer of the messages. Thus, a SNMPv2 entity
- which sends a GetBulkRequest-PDU must take care to set its parameters
- accordingly, so as to reduce the risk of fragmentation. In
- particular, under conditions of network stress, only small values
- should be used for max-repetitions.
-
- 2.6. Transport Mappings
-
- It is important to note that the exchange of SNMPv2 messages requires
- only an unreliable datagram service, with every message being
- entirely and independently contained in a single transport datagram.
- Specific transport mappings and encoding rules are specified
- elsewhere [5]. However, the preferred mapping is the use of the User
-
-
-
- SNMPv2 Working Group Standards Track [Page 4]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- Datagram Protocol [6].
-
- 3. Definitions
-
- SNMPv2-PDU DEFINITIONS ::= BEGIN
-
- IMPORTS
- ObjectName, ObjectSyntax, Integer32
- FROM SNMPv2-SMI;
-
-
- -- protocol data units
-
- PDUs ::=
- CHOICE {
- get-request
- GetRequest-PDU,
-
- get-next-request
- GetNextRequest-PDU,
-
- get-bulk-request
- GetBulkRequest-PDU,
-
- response
- Response-PDU,
-
- set-request
- SetRequest-PDU,
-
- inform-request
- InformRequest-PDU,
-
- snmpV2-trap
- SNMPv2-Trap-PDU,
-
- report
- Report-PDU,
- }
-
-
- -- PDUs
-
- GetRequest-PDU ::=
- [0]
- IMPLICIT PDU
-
- GetNextRequest-PDU ::=
-
-
-
- SNMPv2 Working Group Standards Track [Page 5]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- [1]
- IMPLICIT PDU
-
- Response-PDU ::=
- [2]
- IMPLICIT PDU
-
- SetRequest-PDU ::=
- [3]
- IMPLICIT PDU
-
- -- [4] is obsolete
-
- GetBulkRequest-PDU ::=
- [5]
- IMPLICIT BulkPDU
-
- InformRequest-PDU ::=
- [6]
- IMPLICIT PDU
-
- SNMPv2-Trap-PDU ::=
- [7]
- IMPLICIT PDU
-
- -- Usage and precise semantics of Report-PDU are not presently
- -- defined. Any SNMP administrative framework making use of
- -- this PDU must define its usage and semantics.
- Report-PDU ::=
- [8]
- IMPLICIT PDU
-
- max-bindings
- INTEGER ::= 2147483647
-
- PDU ::=
- SEQUENCE {
- request-id
- Integer32,
-
- error-status -- sometimes ignored
- INTEGER {
- noError(0),
- tooBig(1),
- noSuchName(2), -- for proxy compatibility
- badValue(3), -- for proxy compatibility
- readOnly(4), -- for proxy compatibility
- genErr(5),
-
-
-
- SNMPv2 Working Group Standards Track [Page 6]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- noAccess(6),
- wrongType(7),
- wrongLength(8),
- wrongEncoding(9),
- wrongValue(10),
- noCreation(11),
- inconsistentValue(12),
- resourceUnavailable(13),
- commitFailed(14),
- undoFailed(15),
- authorizationError(16),
- notWritable(17),
- inconsistentName(18)
- },
-
- error-index -- sometimes ignored
- INTEGER (0..max-bindings),
-
- variable-bindings -- values are sometimes ignored
- VarBindList
- }
-
-
- BulkPDU ::= -- MUST be identical in
- SEQUENCE { -- structure to PDU
- request-id
- Integer32,
-
- non-repeaters
- INTEGER (0..max-bindings),
-
- max-repetitions
- INTEGER (0..max-bindings),
-
- variable-bindings -- values are ignored
- VarBindList
- }
-
-
- -- variable binding
-
- VarBind ::=
- SEQUENCE {
- name
- ObjectName,
-
- CHOICE {
- value
-
-
-
- SNMPv2 Working Group Standards Track [Page 7]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- ObjectSyntax,
-
- unSpecified -- in retrieval requests
- NULL,
-
- -- exceptions in responses
- noSuchObject[0]
- IMPLICIT NULL,
-
- noSuchInstance[1]
- IMPLICIT NULL,
-
- endOfMibView[2]
- IMPLICIT NULL
- }
- }
-
-
- -- variable-binding list
-
- VarBindList ::=
- SEQUENCE (SIZE (0..max-bindings)) OF
- VarBind
-
-
- END
-
-
- 4. Protocol Specification
-
- 4.1. Common Constructs
-
- The value of the request-id field in a Response-PDU takes the value
- of the request-id field in the request PDU to which it is a response.
- By use of the request-id value, a SNMPv2 application can distinguish
- the (potentially multiple) outstanding requests, and thereby
- correlate incoming responses with outstanding requests. In cases
- where an unreliable datagram service is used, the request-id also
- provides a simple means of identifying messages duplicated by the
- network. Use of the same request-id on a retransmission of a request
- allows the response to either the original transmission or the
- retransmission to satisfy the request. However, in order to
- calculate the round trip time for transmission and processing of a
- request-response transaction, the SNMPv2 application needs to use a
- different request-id value on a retransmitted request. The latter
- strategy is recommended for use in the majority of situations.
-
-
-
-
-
- SNMPv2 Working Group Standards Track [Page 8]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- A non-zero value of the error-status field in a Response-PDU is used
- to indicate that an exception occurred to prevent the processing of
- the request. In these cases, a non-zero value of the Response-PDU's
- error-index field provides additional information by identifying
- which variable binding in the list caused the exception. A variable
- binding is identified by its index value. The first variable binding
- in a variable-binding list is index one, the second is index two,
- etc.
-
- SNMPv2 limits OBJECT IDENTIFIER values to a maximum of 128 sub-
- identifiers, where each sub-identifier has a maximum value of 2**32-
- 1.
-
- 4.2. PDU Processing
-
- It is mandatory that all SNMPv2 entities acting in an agent role be
- able to generate the following PDU types: Response-PDU and SNMPv2-
- Trap-PDU; further, all such implementations must be able to receive
- the following PDU types: GetRequest-PDU, GetNextRequest-PDU,
- GetBulkRequest-PDU, and SetRequest-PDU.
-
- It is mandatory that all SNMPv2 entities acting in a manager role be
- able to generate the following PDU types: GetRequest-PDU,
- GetNextRequest-PDU, GetBulkRequest-PDU, SetRequest-PDU,
- InformRequest-PDU, and Response-PDU; further, all such
- implementations must be able to receive the following PDU types:
- Response-PDU, SNMPv2-Trap-PDU,
-
- InformRequest-PDU;
-
- In the elements of procedure below, any field of a PDU which is not
- referenced by the relevant procedure is ignored by the receiving
- SNMPv2 entity. However, all components of a PDU, including those
- whose values are ignored by the receiving SNMPv2 entity, must have
- valid ASN.1 syntax and encoding. For example, some PDUs (e.g., the
- GetRequest-PDU) are concerned only with the name of a variable and
- not its value. In this case, the value portion of the variable
- binding is ignored by the receiving SNMPv2 entity. The unSpecified
- value is defined for use as the value portion of such bindings.
-
- On generating a management communication, the message "wrapper" to
- encapsulate the PDU is generated according to the "Elements of
- Procedure" of the administrative framework in use is followed. While
- the definition of "max-bindings" does impose an upper-bound on the
- number of variable bindings, in practice, the size of a message is
- limited only by constraints on the maximum message size -- it is not
- limited by the number of variable bindings.
-
-
-
-
- SNMPv2 Working Group Standards Track [Page 9]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- On receiving a management communication, the "Elements of Procedure"
- of the administrative framework in use is followed, and if those
- procedures indicate that the operation contained within the message
- is to be performed locally, then those procedures also indicate the
- MIB view which is visible to the operation.
-
- 4.2.1. The GetRequest-PDU
-
- A GetRequest-PDU is generated and transmitted at the request of a
- SNMPv2 application.
-
- Upon receipt of a GetRequest-PDU, the receiving SNMPv2 entity
- processes each variable binding in the variable-binding list to
- produce a Response-PDU. All fields of the Response-PDU have the same
- values as the corresponding fields of the received request except as
- indicated below. Each variable binding is processed as follows:
-
- (1) If the variable binding's name exactly matches the name of a
- variable accessible by this request, then the variable binding's
- value field is set to the value of the named variable.
-
- (2) Otherwise, if the variable binding's name does not have an OBJECT
- IDENTIFIER prefix which exactly matches the OBJECT IDENTIFIER
- prefix of any (potential) variable accessible by this request, then
- its value field is set to `noSuchObject'.
-
- (3) Otherwise, the variable binding's value field is set to
- `noSuchInstance'.
-
- If the processing of any variable binding fails for a reason other
- than listed above, then the Response-PDU is re-formatted with the
- same values in its request-id and variable-bindings fields as the
- received GetRequest-PDU, with the value of its error-status field set
- to `genErr', and the value of its error-index field is set to the
- index of the failed variable binding.
-
- Otherwise, the value of the Response-PDU's error-status field is set
- to `noError', and the value of its error-index field is zero.
-
- The generated Response-PDU is then encapsulated into a message. If
- the size of the resultant message is less than or equal to both a
- local constraint and the maximum message size of the originator, it
- is transmitted to the originator of the GetRequest-PDU.
-
- Otherwise, an alternate Response-PDU is generated. This alternate
- Response-PDU is formatted with the same value in its request-id field
- as the received GetRequest-PDU, with the value of its error-status
- field set to `tooBig', the value of its error-index field set to
-
-
-
- SNMPv2 Working Group Standards Track [Page 10]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- zero, and an empty variable-bindings field. This alternate
- Response-PDU is then encapsulated into a message. If the size of the
- resultant message is less than or equal to both a local constraint
- and the maximum message size of the originator, it is transmitted to
- the originator of the GetRequest-PDU. Otherwise, the snmpSilentDrops
- [9] counter is incremented and the resultant message is discarded.
-
- 4.2.2. The GetNextRequest-PDU
-
- A GetNextRequest-PDU is generated and transmitted at the request of a
- SNMPv2 application.
-
- Upon receipt of a GetNextRequest-PDU, the receiving SNMPv2 entity
- processes each variable binding in the variable-binding list to
- produce a Response-PDU. All fields of the Response-PDU have the same
- values as the corresponding fields of the received request except as
- indicated below. Each variable binding is processed as follows:
-
- (1) The variable is located which is in the lexicographically ordered
- list of the names of all variables which are accessible by this
- request and whose name is the first lexicographic successor of the
- variable binding's name in the incoming GetNextRequest-PDU. The
- corresponding variable binding's name and value fields in the
- Response-PDU are set to the name and value of the located variable.
-
- (2) If the requested variable binding's name does not lexicographically
- precede the name of any variable accessible by this request, i.e.,
- there is no lexicographic successor, then the corresponding
- variable binding produced in the Response-PDU has its value field
- set to `endOfMibView', and its name field set to the variable
- binding's name in the request.
-
- If the processing of any variable binding fails for a reason other
- than listed above, then the Response-PDU is re-formatted with the
- same values in its request-id and variable-bindings fields as the
- received GetNextRequest-PDU, with the value of its error-status field
- set to `genErr', and the value of its error-index field is set to the
- index of the failed variable binding.
-
- Otherwise, the value of the Response-PDU's error-status field is set
- to `noError', and the value of its error-index field is zero.
-
- The generated Response-PDU is then encapsulated into a message. If
- the size of the resultant message is less than or equal to both a
- local constraint and the maximum message size of the originator, it
- is transmitted to the originator of the GetNextRequest-PDU.
-
-
-
-
-
- SNMPv2 Working Group Standards Track [Page 11]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- Otherwise, an alternate Response-PDU is generated. This alternate
- Response-PDU is formatted with the same values in its request-id
- field as the received GetNextRequest-PDU, with the value of its
- error-status field set to `tooBig', the value of its error-index
- field set to zero, and an empty variable-bindings field. This
- alternate Response-PDU is then encapsulated into a message. If the
- size of the resultant message is less than or equal to both a local
- constraint and the maximum message size of the originator, it is
- transmitted to the originator of the GetNextRequest-PDU. Otherwise,
- the snmpSilentDrops [9] counter is incremented and the resultant
- message is discarded.
-
- 4.2.2.1. Example of Table Traversal
-
- An important use of the GetNextRequest-PDU is the traversal of
- conceptual tables of information within a MIB. The semantics of this
- type of request, together with the method of identifying individual
- instances of objects in the MIB, provides access to related objects
- in the MIB as if they enjoyed a tabular organization.
-
- In the protocol exchange sketched below, a SNMPv2 application
- retrieves the media-dependent physical address and the address-
- mapping type for each entry in the IP net-to-media Address
- Translation Table [7] of a particular network element. It also
- retrieves the value of sysUpTime [9], at which the mappings existed.
- Suppose that the agent's IP net-to-media table has three entries:
-
- Interface-Number Network-Address Physical-Address Type
-
- 1 10.0.0.51 00:00:10:01:23:45 static
- 1 9.2.3.4 00:00:10:54:32:10 dynamic
- 2 10.0.0.15 00:00:10:98:76:54 dynamic
-
- The SNMPv2 entity acting in a manager role begins by sending a
- GetNextRequest-PDU containing the indicated OBJECT IDENTIFIER values
- as the requested variable names:
-
- GetNextRequest ( sysUpTime,
- ipNetToMediaPhysAddress,
- ipNetToMediaType )
-
- The SNMPv2 entity acting in an agent role responds with a Response-
- PDU:
-
- Response (( sysUpTime.0 = "123456" ),
- ( ipNetToMediaPhysAddress.1.9.2.3.4 =
- "000010543210" ),
- ( ipNetToMediaType.1.9.2.3.4 = "dynamic" ))
-
-
-
- SNMPv2 Working Group Standards Track [Page 12]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- The SNMPv2 entity acting in a manager role continues with:
-
- GetNextRequest ( sysUpTime,
- ipNetToMediaPhysAddress.1.9.2.3.4,
- ipNetToMediaType.1.9.2.3.4 )
-
- The SNMPv2 entity acting in an agent role responds with:
-
- Response (( sysUpTime.0 = "123461" ),
- ( ipNetToMediaPhysAddress.1.10.0.0.51 =
- "000010012345" ),
- ( ipNetToMediaType.1.10.0.0.51 = "static" ))
-
- The SNMPv2 entity acting in a manager role continues with:
-
- GetNextRequest ( sysUpTime,
- ipNetToMediaPhysAddress.1.10.0.0.51,
- ipNetToMediaType.1.10.0.0.51 )
-
- The SNMPv2 entity acting in an agent role responds with:
-
- Response (( sysUpTime.0 = "123466" ),
- ( ipNetToMediaPhysAddress.2.10.0.0.15 =
- "000010987654" ),
- ( ipNetToMediaType.2.10.0.0.15 = "dynamic" ))
-
- The SNMPv2 entity acting in a manager role continues with:
-
- GetNextRequest ( sysUpTime,
- ipNetToMediaPhysAddress.2.10.0.0.15,
- ipNetToMediaType.2.10.0.0.15 )
-
- As there are no further entries in the table, the SNMPv2 entity
- acting in an agent role responds with the variables that are next in
- the lexicographical ordering of the accessible object names, for
- example:
-
- Response (( sysUpTime.0 = "123471" ),
- ( ipNetToMediaNetAddress.1.9.2.3.4 =
- "9.2.3.4" ),
- ( ipRoutingDiscards.0 = "2" ))
-
- This response signals the end of the table to the SNMPv2 entity
- acting in a manager role.
-
-
-
-
-
-
-
- SNMPv2 Working Group Standards Track [Page 13]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- 4.2.3. The GetBulkRequest-PDU
-
- A GetBulkRequest-PDU is generated and transmitted at the request of a
- SNMPv2 application. The purpose of the GetBulkRequest-PDU is to
- request the transfer of a potentially large amount of data,
- including, but not limited to, the efficient and rapid retrieval of
- large tables.
-
- Upon receipt of a GetBulkRequest-PDU, the receiving SNMPv2 entity
- processes each variable binding in the variable-binding list to
- produce a Response-PDU with its request-id field having the same
- value as in the request. Processing begins by examining the values
- in the non-repeaters and max-repetitions fields. If the value in the
- non-repeaters field is less than zero, then the value of the field is
- set to zero. Similarly, if the value in the max-repetitions field is
- less than zero, then the value of the field is set to zero.
-
- For the GetBulkRequest-PDU type, the successful processing of each
- variable binding in the request generates zero or more variable
- bindings in the Response-PDU. That is, the one-to-one mapping
- between the variable bindings of the GetRequest-PDU, GetNextRequest-
- PDU, and SetRequest-PDU types and the resultant Response-PDUs does
- not apply for the mapping between the variable bindings of a
- GetBulkRequest-PDU and the resultant Response-PDU.
-
- The values of the non-repeaters and max-repetitions fields in the
- request specify the processing requested. One variable binding in
- the Response-PDU is requested for the first N variable bindings in
- the request and M variable bindings are requested for each of the R
- remaining variable bindings in the request. Consequently, the total
- number of requested variable bindings communicated by the request is
- given by N + (M * R), where N is the minimum of: a) the value of the
- non-repeaters field in the request, and b) the number of variable
- bindings in the request; M is the value of the max-repetitions field
- in the request; and R is the maximum of: a) number of variable
- bindings in the request - N, and b) zero.
-
- The receiving SNMPv2 entity produces a Response-PDU with up to the
- total number of requested variable bindings communicated by the
- request. The request-id shall have the same value as the received
- GetBulkRequest-PDU.
-
- If N is greater than zero, the first through the (N)-th variable
- bindings of the Response-PDU are each produced as follows:
-
- (1) The variable is located which is in the lexicographically ordered
- list of the names of all variables which are accessible by this
- request and whose name is the first lexicographic successor of the
-
-
-
- SNMPv2 Working Group Standards Track [Page 14]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- variable binding's name in the incoming GetBulkRequest-PDU. The
- corresponding variable binding's name and value fields in the
- Response-PDU are set to the name and value of the located variable.
-
- (2) If the requested variable binding's name does not lexicographically
- precede the name of any variable accessible by this request, i.e.,
- there is no lexicographic successor, then the corresponding
- variable binding produced in the Response-PDU has its value field
- set to `endOfMibView', and its name field set to the variable
- binding's name in the request.
-
- If M and R are non-zero, the (N + 1)-th and subsequent variable
- bindings of the Response-PDU are each produced in a similar manner.
- For each iteration i, such that i is greater than zero and less than
- or equal to M, and for each repeated variable, r, such that r is
- greater than zero and less than or equal to R, the (N + ( (i-1) * R )
- + r)-th variable binding of the Response-PDU is produced as follows:
-
- (1) The variable which is in the lexicographically ordered list of the
- names of all variables which are accessible by this request and
- whose name is the (i)-th lexicographic successor of the (N + r)-th
- variable binding's name in the incoming GetBulkRequest-PDU is
- located and the variable binding's name and value fields are set to
- the name and value of the located variable.
-
- (2) If there is no (i)-th lexicographic successor, then the
- corresponding variable binding produced in the Response-PDU has its
- value field set to `endOfMibView', and its name field set to either
- the last lexicographic successor, or if there are no lexicographic
- successors, to the (N + r)-th variable binding's name in the
- request.
-
- While the maximum number of variable bindings in the Response-PDU is
- bounded by N + (M * R), the response may be generated with a lesser
- number of variable bindings (possibly zero) for either of three
- reasons.
-
- (1) If the size of the message encapsulating the Response-PDU
- containing the requested number of variable bindings would be
- greater than either a local constraint or the maximum message size
- of the originator, then the response is generated with a lesser
- number of variable bindings. This lesser number is the ordered set
- of variable bindings with some of the variable bindings at the end
- of the set removed, such that the size of the message encapsulating
- the Response-PDU is approximately equal to but no greater than
- either a local constraint or the maximum message size of the
- originator. Note that the number of variable bindings removed has
- no relationship to the values of N, M, or R.
-
-
-
- SNMPv2 Working Group Standards Track [Page 15]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- (2) The response may also be generated with a lesser number of variable
- bindings if for some value of iteration i, such that i is greater
- than zero and less than or equal to M, that all of the generated
- variable bindings have the value field set to the `endOfMibView'.
- In this case, the variable bindings may be truncated after the (N +
- (i * R))-th variable binding.
-
- (3) In the event that the processing of a request with many repetitions
- requires a significantly greater amount of processing time than a
- normal request, then an agent may terminate the request with less
- than the full number of repetitions, providing at least one
- repetition is completed.
-
- If the processing of any variable binding fails for a reason other
- than listed above, then the Response-PDU is re-formatted with the
- same values in its request-id and variable-bindings fields as the
- received GetBulkRequest-PDU, with the value of its error-status field
- set to `genErr', and the value of its error-index field is set to the
- index of the variable binding in the original request which
- corresponds to the failed variable binding.
-
- Otherwise, the value of the Response-PDU's error-status field is set
- to `noError', and the value of its error-index field to zero.
-
- The generated Response-PDU (possibly with an empty variable-bindings
- field) is then encapsulated into a message. If the size of the
- resultant message is less than or equal to both a local constraint
- and the maximum message size of the originator, it is transmitted to
- the originator of the GetBulkRequest-PDU. Otherwise, the
- snmpSilentDrops [9] counter is incremented and the resultant message
- is discarded.
-
- 4.2.3.1. Another Example of Table Traversal
-
- This example demonstrates how the GetBulkRequest-PDU can be used as
- an alternative to the GetNextRequest-PDU. The same traversal of the
- IP net-to-media table as shown in Section 4.2.2.1 is achieved with
- fewer exchanges.
-
- The SNMPv2 entity acting in a manager role begins by sending a
- GetBulkRequest-PDU with the modest max-repetitions value of 2, and
- containing the indicated OBJECT IDENTIFIER values as the requested
- variable names:
-
- GetBulkRequest [ non-repeaters = 1, max-repetitions = 2 ]
- ( sysUpTime,
- ipNetToMediaPhysAddress,
- ipNetToMediaType )
-
-
-
- SNMPv2 Working Group Standards Track [Page 16]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- The SNMPv2 entity acting in an agent role responds with a Response-PDU:
-
- Response (( sysUpTime.0 = "123456" ),
- ( ipNetToMediaPhysAddress.1.9.2.3.4 =
- "000010543210" ),
- ( ipNetToMediaType.1.9.2.3.4 = "dynamic" ),
- ( ipNetToMediaPhysAddress.1.10.0.0.51 =
- "000010012345" ),
- ( ipNetToMediaType.1.10.0.0.51 = "static" ))
-
- The SNMPv2 entity acting in a manager role continues with:
-
- GetBulkRequest [ non-repeaters = 1, max-repetitions = 2 ]
- ( sysUpTime,
- ipNetToMediaPhysAddress.1.10.0.0.51,
- ipNetToMediaType.1.10.0.0.51 )
-
- The SNMPv2 entity acting in an agent role responds with:
-
- Response (( sysUpTime.0 = "123466" ),
- ( ipNetToMediaPhysAddress.2.10.0.0.15 =
- "000010987654" ),
- ( ipNetToMediaType.2.10.0.0.15 =
- "dynamic" ),
- ( ipNetToMediaNetAddress.1.9.2.3.4 =
- "9.2.3.4" ),
- ( ipRoutingDiscards.0 = "2" ))
-
- This response signals the end of the table to the SNMPv2 entity
- acting in a manager role.
-
- 4.2.4. The Response-PDU
-
- The Response-PDU is generated by a SNMPv2 entity only upon receipt of
- a GetRequest-PDU, GetNextRequest-PDU, GetBulkRequest-PDU,
- SetRequest-PDU, or InformRequest-PDU, as described elsewhere in this
- document.
-
- If the error-status field of the Response-PDU is non-zero, the value
- fields of the variable bindings in the variable binding list are
- ignored.
-
- If both the error-status field and the error-index field of the
- Response-PDU are non-zero, then the value of the error-index field is
- the index of the variable binding (in the variable-binding list of
- the corresponding request) for which the request failed. The first
- variable binding in a request's variable-binding list is index one,
- the second is index two, etc.
-
-
-
- SNMPv2 Working Group Standards Track [Page 17]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- A compliant SNMPv2 entity acting in a manager role must be able to
- properly receive and handle a Response-PDU with an error-status field
- equal to `noSuchName', `badValue', or `readOnly'. (See Section 3.1.2
- of [8].)
-
- Upon receipt of a Response-PDU, the receiving SNMPv2 entity presents
- its contents to the SNMPv2 application which generated the request
- with the same request-id value.
-
- 4.2.5. The SetRequest-PDU
-
- A SetRequest-PDU is generated and transmitted at the request of a
- SNMPv2 application.
-
- Upon receipt of a SetRequest-PDU, the receiving SNMPv2 entity
- determines the size of a message encapsulating a Response-PDU having
- the same values in its request-id and variable-bindings fields as the
- received SetRequest-PDU, and the largest possible sizes of the
- error-status and error-index fields. If the determined message size
- is greater than either a local constraint or the maximum message size
- of the originator, then an alternate Response-PDU is generated,
- transmitted to the originator of the SetRequest-PDU, and processing
- of the SetRequest-PDU terminates immediately thereafter. This
- alternate Response-PDU is formatted with the same values in its
- request-id field as the received SetRequest-PDU, with the value of
- its error-status field set to `tooBig', the value of its error-index
- field set to zero, and an empty variable-bindings field. This
- alternate Response-PDU is then encapsulated into a message. If the
- size of the resultant message is less than or equal to both a local
- constraint and the maximum message size of the originator, it is
- transmitted to the originator of the SetRequest-PDU. Otherwise, the
- snmpSilentDrops [9] counter is incremented and the resultant message
- is discarded. Regardless, processing of the SetRequest-PDU
- terminates.
-
- Otherwise, the receiving SNMPv2 entity processes each variable
- binding in the variable-binding list to produce a Response-PDU. All
- fields of the Response-PDU have the same values as the corresponding
- fields of the received request except as indicated below.
-
- The variable bindings are conceptually processed as a two phase
- operation. In the first phase, each variable binding is validated;
- if all validations are successful, then each variable is altered in
- the second phase. Of course, implementors are at liberty to
- implement either the first, or second, or both, of these conceptual
- phases as multiple implementation phases. Indeed, such multiple
- implementation phases may be necessary in some cases to ensure
- consistency.
-
-
-
- SNMPv2 Working Group Standards Track [Page 18]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- The following validations are performed in the first phase on each
- variable binding until they are all successful, or until one fails:
-
- (1) If the variable binding's name specifies an existing or non-
- existent variable to which this request is/would be denied access
- because it is/would not be in the appropriate MIB view, then the
- value of the Response-PDU's error-status field is set to
- `noAccess', and the value of its error-index field is set to the
- index of the failed variable binding.
-
- (2) Otherwise, if there are no variables which share the same OBJECT
- IDENTIFIER prefix as the variable binding's name, and which are
- able to be created or modified no matter what new value is
- specified, then the value of the Response-PDU's error-status field
- is set to `notWritable', and the value of its error-index field is
- set to the index of the failed variable binding.
-
- (3) Otherwise, if the variable binding's value field specifies,
- according to the ASN.1 language, a type which is inconsistent with
- that required for all variables which share the same OBJECT
- IDENTIFIER prefix as the variable binding's name, then the value of
- the Response-PDU's error-status field is set to `wrongType', and
- the value of its error-index field is set to the index of the
- failed variable binding.
-
- (4) Otherwise, if the variable binding's value field specifies,
- according to the ASN.1 language, a length which is inconsistent
- with that required for all variables which share the same OBJECT
- IDENTIFIER prefix as the variable binding's name, then the value of
- the Response-PDU's error-status field is set to `wrongLength', and
- the value of its error-index field is set to the index of the
- failed variable binding.
-
- (5) Otherwise, if the variable binding's value field contains an ASN.1
- encoding which is inconsistent with that field's ASN.1 tag, then
- the value of the Response-PDU's error-status field is set to
- `wrongEncoding', and the value of its error-index field is set to
- the index of the failed variable binding. (Note that not all
- implementation strategies will generate this error.)
-
- (6) Otherwise, if the variable binding's value field specifies a value
- which could under no circumstances be assigned to the variable,
- then the value of the Response-PDU's error-status field is set to
- `wrongValue', and the value of its error-index field is set to the
- index of the failed variable binding.
-
- (7) Otherwise, if the variable binding's name specifies a variable
- which does not exist and could not ever be created (even though
-
-
-
- SNMPv2 Working Group Standards Track [Page 19]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- some variables sharing the same OBJECT IDENTIFIER prefix might
- under some circumstances be able to be created), then the value of
- the Response-PDU's error-status field is set to `noCreation', and
- the value of its error-index field is set to the index of the
- failed variable binding.
-
- (8) Otherwise, if the variable binding's name specifies a variable
- which does not exist but can not be created under the present
- circumstances (even though it could be created under other
- circumstances), then the value of the Response-PDU's error-status
- field is set to `inconsistentName', and the value of its error-
- index field is set to the index of the failed variable binding.
-
- (9) Otherwise, if the variable binding's name specifies a variable
- which exists but can not be modified no matter what new value is
- specified, then the value of the Response-PDU's error-status field
- is set to `notWritable', and the value of its error-index field is
- set to the index of the failed variable binding.
-
- (10) Otherwise, if the variable binding's value field specifies a value
- that could under other circumstances be held by the variable, but
- is presently inconsistent or otherwise unable to be assigned to the
- variable, then the value of the Response-PDU's error-status field
- is set to `inconsistentValue', and the value of its error-index
- field is set to the index of the failed variable binding.
-
- (11) When, during the above steps, the assignment of the value specified
- by the variable binding's value field to the specified variable
- requires the allocation of a resource which is presently
- unavailable, then the value of the Response-PDU's error-status
- field is set to `resourceUnavailable', and the value of its error-
- index field is set to the index of the failed variable binding.
-
- (12) If the processing of the variable binding fails for a reason other
- than listed above, then the value of the Response-PDU's error-
- status field is set to `genErr', and the value of its error-index
- field is set to the index of the failed variable binding.
-
- (13) Otherwise, the validation of the variable binding succeeds.
-
- At the end of the first phase, if the validation of all variable
- bindings succeeded, then the value of the Response-PDU's error-status
- field is set to `noError' and the value of its error-index field is
- zero, and processing continues as follows.
-
- For each variable binding in the request, the named variable is
- created if necessary, and the specified value is assigned to it.
- Each of these variable assignments occurs as if simultaneously with
-
-
-
- SNMPv2 Working Group Standards Track [Page 20]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- respect to all other assignments specified in the same request.
- However, if the same variable is named more than once in a single
- request, with different associated values, then the actual assignment
- made to that variable is implementation-specific.
-
- If any of these assignments fail (even after all the previous
- validations), then all other assignments are undone, and the
- Response-PDU is modified to have the value of its error-status field
- set to `commitFailed', and the value of its error-index field set to
- the index of the failed variable binding.
-
- If and only if it is not possible to undo all the assignments, then
- the Response-PDU is modified to have the value of its error-status
- field set to `undoFailed', and the value of its error-index field is
- set to zero. Note that implementations are strongly encouraged to
- take all possible measures to avoid use of either `commitFailed' or
- `undoFailed' - these two error-status codes are not to be taken as
- license to take the easy way out in an implementation.
-
- Finally, the generated Response-PDU is encapsulated into a message,
- and transmitted to the originator of the SetRequest-PDU.
-
- 4.2.6. The SNMPv2-Trap-PDU
-
- A SNMPv2-Trap-PDU is generated and transmitted by a SNMPv2 entity
- acting in an agent role when an exceptional situation occurs.
-
- The destination(s) to which a SNMPv2-Trap-PDU is sent is determined
- in an implementation-dependent fashion by the SNMPv2 entity. The
- first two variable bindings in the variable binding list of an
- SNMPv2-Trap-PDU are sysUpTime.0 [9] and snmpTrapOID.0 [9]
- respectively. If the OBJECTS clause is present in the invocation of
- the corresponding NOTIFICATION-TYPE macro, then each corresponding
- variable, as instantiated by this notification, is copied, in order,
- to the variable-bindings field. If any additional variables are
- being included (at the option of the generating SNMPv2 entity), then
- each is copied to the variable-bindings field.
-
- 4.2.7. The InformRequest-PDU
-
- An InformRequest-PDU is generated and transmitted at the request of
- an application in a SNMPv2 entity acting in a manager role, that
- wishes to notify another application (in a SNMPv2 entity also acting
- in a manager role) of information in a MIB view which is remote to
- the receiving application.
-
- The destination(s) to which an InformRequest-PDU is sent is specified
- by the requesting application. The first two variable bindings in
-
-
-
- SNMPv2 Working Group Standards Track [Page 21]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- the variable binding list of an InformRequest-PDU are sysUpTime.0 [9]
- and snmpTrapOID.0 [9] respectively. If the OBJECTS clause is present
- in the invocation of the corresponding NOTIFICATION-TYPE macro, then
- each corresponding variable, as instantiated by this notification, is
- copied, in order, to the variable-bindings field.
-
- Upon receipt of an InformRequest-PDU, the receiving SNMPv2 entity
- determines the size of a message encapsulating a Response-PDU with
- the same values in its request-id, error-status, error-index and
- variable-bindings fields as the received InformRequest-PDU. If the
- determined message size is greater than either a local constraint or
- the maximum message size of the originator, then an alternate
- Response-PDU is generated, transmitted to the originator of the
- InformRequest-PDU, and processing of the InformRequest-PDU terminates
- immediately thereafter. This alternate Response-PDU is formatted
- with the same values in its request-id field as the received
- InformRequest-PDU, with the value of its error-status field set to
- `tooBig', the value of its error-index field set to zero, and an
- empty variable-bindings field. This alternate Response-PDU is then
- encapsulated into a message. If the size of the resultant message is
- less than or equal to both a local constraint and the maximum message
- size of the originator, it is transmitted to the originator of the
- InformRequest-PDU. Otherwise, the snmpSilentDrops [9] counter is
- incremented and the resultant message is discarded. Regardless,
- processing of the InformRequest-PDU terminates.
-
- Otherwise, the receiving SNMPv2 entity:
-
- (1) presents its contents to the appropriate SNMPv2 application;
-
- (2) generates a Response-PDU with the same values in its request-id and
- variable-bindings fields as the received InformRequest-PDU, with
- the value of its error-status field is set to `noError' and the
- value of its error-index field is zero; and
-
- (3) transmits the generated Response-PDU to the originator of the
- InformRequest-PDU.
-
- 5. Security Considerations
-
- Security issues are not discussed in this memo.
-
-
-
-
-
-
-
-
-
-
- SNMPv2 Working Group Standards Track [Page 22]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- 6. Editor's Address
-
- Keith McCloghrie
- Cisco Systems, Inc.
- 170 West Tasman Drive
- San Jose, CA 95134-1706
- US
-
- Phone: +1 408 526 5260
- EMail: kzm@cisco.com
-
- 7. Acknowledgements
-
- This document is the result of significant work by the four major
- contributors:
-
- Jeffrey D. Case (SNMP Research, case@snmp.com)
- Keith McCloghrie (Cisco Systems, kzm@cisco.com)
- Marshall T. Rose (Dover Beach Consulting, mrose@dbc.mtview.ca.us)
- Steven Waldbusser (International Network Services, stevew@uni.ins.com)
-
- In addition, the contributions of the SNMPv2 Working Group are
- acknowledged. In particular, a special thanks is extended for the
- contributions of:
-
- Alexander I. Alten (Novell)
- Dave Arneson (Cabletron)
- Uri Blumenthal (IBM)
- Doug Book (Chipcom)
- Kim Curran (Bell-Northern Research)
- Jim Galvin (Trusted Information Systems)
- Maria Greene (Ascom Timeplex)
- Iain Hanson (Digital)
- Dave Harrington (Cabletron)
- Nguyen Hien (IBM)
- Jeff Johnson (Cisco Systems)
- Michael Kornegay (Object Quest)
- Deirdre Kostick (AT&T Bell Labs)
- David Levi (SNMP Research)
- Daniel Mahoney (Cabletron)
- Bob Natale (ACE*COMM)
- Brian O'Keefe (Hewlett Packard)
- Andrew Pearson (SNMP Research)
- Dave Perkins (Peer Networks)
- Randy Presuhn (Peer Networks)
- Aleksey Romanov (Quality Quorum)
- Shawn Routhier (Epilogue)
- Jon Saperia (BGS Systems)
-
-
-
- SNMPv2 Working Group Standards Track [Page 23]
-
- RFC 1905 Protocol Operations for SNMPv2 January 1996
-
-
- Bob Stewart (Cisco Systems, bstewart@cisco.com), chair
- Kaj Tesink (Bellcore)
- Glenn Waters (Bell-Northern Research)
- Bert Wijnen (IBM)
-
- 8. References
-
- [1] Information processing systems - Open Systems Interconnection -
- Specification of Abstract Syntax Notation One (ASN.1),
- International Organization for Standardization. International
- Standard 8824, (December, 1987).
-
- [2] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
- S. Waldbusser, "Structure of Management Information for Version 2
- of the Simple Network Management Protocol (SNMPv2)", RFC 1902,
- January 1996.
-
- [3] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
- S. Waldbusser, "Textual Conventions for Version 2 of the Simple
- Network Management Protocol (SNMPv2)", RFC 1903, January 1996.
-
- [4] Kent, C., and J. Mogul, Fragmentation Considered Harmful,
- Proceedings, ACM SIGCOMM '87, Stowe, VT, (August 1987).
-
- [5] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
- S. Waldbusser, "Transport Mappings for Version 2 of the Simple
- Network Management Protocol (SNMPv2)", RFC 1906, January 1996.
-
- [6] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
- USC/Information Sciences Institute, August 1980.
-
- [7] McCloghrie, K., and M. Rose, Editors, "Management Information
- Base for Network Management of TCP/IP-based internets:
- MIB-II", STD 17, RFC 1213, March 1991.
-
- [8] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
- S. Waldbusser, "Coexistence between Version 1 and Version 2
- of the Internet-standard Network Management Framework", RFC 1908,
- January 1996.
-
- [9] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
- S. Waldbusser, "Management Information Base for Version 2 of the
- Simple Network Management Protocol (SNMPv2)", RFC 1907,
- January 1996.
-
-
-
-
-
-
-
- SNMPv2 Working Group Standards Track [Page 24]
-
-